//2017年10月9日
//eaglet QQ:7488719
//对文件上传操作需要使用fs模块
// 文件操作的模板
var fs = require('fs');
var formidable = require("formidable");
//加载时间格式化模块
var moment = require('moment');

//图片上传模块，支持单文件和多文件上传，并提供文件路径返回
//便于数据库存储
//第一个参数为请求对象
//第二个参数为上传路径 var uploadPath = './public/upload/goods_img/';
//第三个参数为数据库保存路径  var uploadInsertPath = '/upload/goods_img/';
function mutlifileUpload(req, uploadPath, uploadInsertPath, callback) {

	//设置临时目录
	var tempDir = './public/upload/temp/';
	//路径格式{yyyy}-{mm}-{dd}_{rand:6}_{filename}
	//设置时间目录console.log(moment(new Date).format("YYYY-MM-DD HH:mm:ss"));
	var datedir = moment(new Date).format("YYYY_MM_DD");

	//判断当前目录是否存在，如果不存在则新建目录
	if(!fs.existsSync(uploadPath+datedir+'/')) {
		fs.mkdirSync(uploadPath+datedir+'/');
	}

	if(!fs.existsSync(tempDir)) {
		fs.mkdirSync(tempDir);
	}

	var form = new formidable.IncomingForm(); //创建上传表单
	form.encoding = 'utf-8'; //设置编辑
	form.uploadDir = tempDir; //设置缓存目录
	form.multiples = true; //设置为多文件上传
	form.keepExtensions = true; //保留后缀
	form.maxFieldsSize = 5 * 1024 * 1024; //文件大小
	form.type = true;

	//存放多文件数组
	var files = [];
	//存放多文件字符串，数据库中字段，以|分割
	var filesdata = '';
	//新建产品主展示图片
	var product_img;
	//文件都将保存在files数组中  
	form.on('file', function(filed, file) {
		files.push([filed, file]);
	});

	form.parse(req, function(err, fields, files) {
		if(err) {
			console.log('err:' + err);
			return;
		}

		//单文件上传处理
		if(!files.pd_img.length) {
			var fileName = files.pd_img.name;
			//文件上传路径
			var fileUrl = uploadPath + datedir + '/' + new Date().getTime() + '.' + fileName.split('.')[1];
			var usedataUrl = uploadInsertPath + datedir + '/' + new Date().getTime() + '.' + fileName.split('.')[1];
			//nodejs里文件重命名就是另存为，参数一为旧文件路径，参数二为新文件路径
			fs.renameSync(files.pd_img.path, fileUrl); //重命名 //测试成功
			filesdata = usedataUrl + '|';
			product_img = filesdata.substr(0, filesdata.length - 1);
			//回调参数
			//第一个错误信息
			//第二个表单字段信息
			//第三个上传文件字符串
			callback(err, fields, product_img, product_img);
		} else {
			//多文件处理部分，不能处理单文件
			//获取上传文件 多文件
			//files.pd_img[k]里保存着用户所上传的文件
			for(i = 0; i < files.pd_img.length; i++) {

				var fileName = files.pd_img[i].name; //文件名
				//文件上传路径
				var fileUrl = uploadPath + datedir + '/' + new Date().getTime() + '.' + fileName.split('.')[1];
				var usedataUrl = uploadInsertPath + datedir + '/' + new Date().getTime() + '.' + fileName.split('.')[1];

				//nodejs里文件重命名就是另存为，参数一为旧文件路径，参数二为新文件路径
				fs.renameSync(files.pd_img[i].path, fileUrl); //重命名 //测试成功

				if(i == 0) {
					product_img = usedataUrl;
				}

				filesdata += usedataUrl + '|';
			}

			//回调参数
			//第一个错误信息
			//第二个表单字段信息
			//第三个上传文件字符串
			callback(err, fields, product_img, filesdata.substr(0, filesdata.length - 1));
		}

		//清空缓存目录
		if(fs.existsSync(tempDir)) {
			files = fs.readdirSync(tempDir);
			files.forEach(function(file, index) {
				var curPath = tempDir + "/" + file;
				if(fs.statSync(curPath).isDirectory()) { // recurse
					deleteFolder(curPath);
				} else { // delete file
					fs.unlinkSync(curPath);
				}
			});
		}

	});
}

function clearTemp() {
	//清空缓存目录
	if(fs.existsSync(tempDir)) {
		files = fs.readdirSync(tempDir);
		files.forEach(function(file, index) {
			var curPath = tempDir + "/" + file;
			if(fs.statSync(curPath).isDirectory()) { // recurse
				deleteFolder(curPath);
			} else { // delete file
				fs.unlinkSync(curPath);
			}
		});
	}
}

exports.mutlifileUpload = mutlifileUpload;